package jrain.fw.script.tools;

import java.io.PrintStream;
import java.text.MessageFormat;

public class Logger {
 
	PrintStream mOut;

 
	public Logger(PrintStream pOut) {
		mOut = pOut;
	}

	 
	public boolean isLoggingWarning() {
		return false;
	}

	 
	public void logWarning(String pMessage, Throwable pRootCause) throws ELException {
		if (isLoggingWarning()) {
			if (mOut != null) {
				if (pMessage == null) {
					mOut.println(pRootCause);
				} else if (pRootCause == null) {
					mOut.println(pMessage);
				} else {
					mOut.println(pMessage + ": " + pRootCause);
				}
			}
		}
	}

	 
	public void logWarning(String pTemplate) throws ELException {
		if (isLoggingWarning()) {
			logWarning(pTemplate, null);
		}
	}

	 
	public void logWarning(Throwable pRootCause) throws ELException {
		if (isLoggingWarning()) {
			logWarning(null, pRootCause);
		}
	}

	 
	public void logWarning(String pTemplate, Object pArg0) throws ELException {
		if (isLoggingWarning()) {
			logWarning(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, }));
		}
	}

	// -------------------------------------

	/**
	 * Logs a warning
	 */
	public void logWarning(String pTemplate, Throwable pRootCause, Object pArg0) throws ELException {
		if (isLoggingWarning()) {
			logWarning(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, }), pRootCause);
		}
	}

	// -------------------------------------

	/**
	 * Logs a warning
	 */
	public void logWarning(String pTemplate, Object pArg0, Object pArg1) throws ELException {
		if (isLoggingWarning()) {
			logWarning(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, }));
		}
	}

	// -------------------------------------

	/**
	 * Logs a warning
	 */
	public void logWarning(String pTemplate, Throwable pRootCause, Object pArg0, Object pArg1) throws ELException {
		if (isLoggingWarning()) {
			logWarning(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, }), pRootCause);
		}
	}

	// -------------------------------------

	/**
	 * Logs a warning
	 */
	public void logWarning(String pTemplate, Object pArg0, Object pArg1, Object pArg2) throws ELException {
		if (isLoggingWarning()) {
			logWarning(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, "" + pArg2, }));
		}
	}

	// -------------------------------------

	/**
	 * Logs a warning
	 */
	public void logWarning(String pTemplate, Throwable pRootCause, Object pArg0, Object pArg1, Object pArg2) throws ELException {
		if (isLoggingWarning()) {
			logWarning(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, "" + pArg2, }), pRootCause);
		}
	}

	// -------------------------------------

	/**
	 * Logs a warning
	 */
	public void logWarning(String pTemplate, Object pArg0, Object pArg1, Object pArg2, Object pArg3) throws ELException {
		if (isLoggingWarning()) {
			logWarning(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, "" + pArg2, "" + pArg3, }));
		}
	}

	// -------------------------------------

	/**
	 * Logs a warning
	 */
	public void logWarning(String pTemplate, Throwable pRootCause, Object pArg0, Object pArg1, Object pArg2, Object pArg3) throws ELException {
		if (isLoggingWarning()) {
			logWarning(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, "" + pArg2, "" + pArg3, }), pRootCause);
		}
	}

	// -------------------------------------

	/**
	 * Logs a warning
	 */
	public void logWarning(String pTemplate, Object pArg0, Object pArg1, Object pArg2, Object pArg3, Object pArg4) throws ELException {
		if (isLoggingWarning()) {
			logWarning(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, "" + pArg2, "" + pArg3, "" + pArg4, }));
		}
	}

	// -------------------------------------

	/**
	 * Logs a warning
	 */
	public void logWarning(String pTemplate, Throwable pRootCause, Object pArg0, Object pArg1, Object pArg2, Object pArg3, Object pArg4) throws ELException {
		if (isLoggingWarning()) {
			logWarning(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, "" + pArg2, "" + pArg3, "" + pArg4, }), pRootCause);
		}
	}

	// -------------------------------------

	/**
	 * Logs a warning
	 */
	public void logWarning(String pTemplate, Object pArg0, Object pArg1, Object pArg2, Object pArg3, Object pArg4, Object pArg5) throws ELException {
		if (isLoggingWarning()) {
			logWarning(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, "" + pArg2, "" + pArg3, "" + pArg4, "" + pArg5, }));
		}
	}

	// -------------------------------------

	/**
	 * Logs a warning
	 */
	public void logWarning(String pTemplate, Throwable pRootCause, Object pArg0, Object pArg1, Object pArg2, Object pArg3, Object pArg4, Object pArg5)
			throws ELException {
		if (isLoggingWarning()) {
			logWarning(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, "" + pArg2, "" + pArg3, "" + pArg4, "" + pArg5, }), pRootCause);
		}
	}

	// -------------------------------------

	/**
	 * Returns true if the application should even bother to try logging an error.
	 */
	public boolean isLoggingError() {
		return true;
	}

	// -------------------------------------

	/**
	 * Logs an error
	 */
	public void logError(String pMessage, Throwable pRootCause) throws ELException {
		if (isLoggingError()) {
			if (pMessage == null) {
				throw new ELException(pRootCause);
			} else if (pRootCause == null) {
				throw new ELException(pMessage);
			} else {
				throw new ELException(pMessage, pRootCause);
			}
		}
	}

	// -------------------------------------

	/**
	 * Logs an error
	 */
	public void logError(String pTemplate) throws ELException {
		if (isLoggingError()) {
			logError(pTemplate, null);
		}
	}

	// -------------------------------------

	/**
	 * Logs an error
	 */
	public void logError(Throwable pRootCause) throws ELException {
		if (isLoggingError()) {
			logError(null, pRootCause);
		}
	}

	// -------------------------------------

	/**
	 * Logs an error
	 */
	public void logError(String pTemplate, Object pArg0) throws ELException {
		if (isLoggingError()) {
			logError(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, }));
		}
	}

	// -------------------------------------

	/**
	 * Logs an error
	 */
	public void logError(String pTemplate, Throwable pRootCause, Object pArg0) throws ELException {
		if (isLoggingError()) {
			logError(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, }), pRootCause);
		}
	}

	// -------------------------------------

	/**
	 * Logs an error
	 */
	public void logError(String pTemplate, Object pArg0, Object pArg1) throws ELException {
		if (isLoggingError()) {
			logError(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, }));
		}
	}

	// -------------------------------------

	/**
	 * Logs an error
	 */
	public void logError(String pTemplate, Throwable pRootCause, Object pArg0, Object pArg1) throws ELException {
		if (isLoggingError()) {
			logError(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, }), pRootCause);
		}
	}

	// -------------------------------------

	/**
	 * Logs an error
	 */
	public void logError(String pTemplate, Object pArg0, Object pArg1, Object pArg2) throws ELException {
		if (isLoggingError()) {
			logError(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, "" + pArg2, }));
		}
	}

	// -------------------------------------

	/**
	 * Logs an error
	 */
	public void logError(String pTemplate, Throwable pRootCause, Object pArg0, Object pArg1, Object pArg2) throws ELException {
		if (isLoggingError()) {
			logError(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, "" + pArg2, }), pRootCause);
		}
	}

	// -------------------------------------

	/**
	 * Logs an error
	 */
	public void logError(String pTemplate, Object pArg0, Object pArg1, Object pArg2, Object pArg3) throws ELException {
		if (isLoggingError()) {
			logError(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, "" + pArg2, "" + pArg3, }));
		}
	}

	// -------------------------------------

	/**
	 * Logs an error
	 */
	public void logError(String pTemplate, Throwable pRootCause, Object pArg0, Object pArg1, Object pArg2, Object pArg3) throws ELException {
		if (isLoggingError()) {
			logError(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, "" + pArg2, "" + pArg3, }), pRootCause);
		}
	}

	// -------------------------------------

	/**
	 * Logs an error
	 */
	public void logError(String pTemplate, Object pArg0, Object pArg1, Object pArg2, Object pArg3, Object pArg4) throws ELException {
		if (isLoggingError()) {
			logError(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, "" + pArg2, "" + pArg3, "" + pArg4, }));
		}
	}

	// -------------------------------------

	/**
	 * Logs an error
	 */
	public void logError(String pTemplate, Throwable pRootCause, Object pArg0, Object pArg1, Object pArg2, Object pArg3, Object pArg4) throws ELException {
		if (isLoggingError()) {
			logError(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, "" + pArg2, "" + pArg3, "" + pArg4, }), pRootCause);
		}
	}

	// -------------------------------------

	/**
	 * Logs an error
	 */
	public void logError(String pTemplate, Object pArg0, Object pArg1, Object pArg2, Object pArg3, Object pArg4, Object pArg5) throws ELException {
		if (isLoggingError()) {
			logError(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, "" + pArg2, "" + pArg3, "" + pArg4, "" + pArg5, }));
		}
	}

	// -------------------------------------

	/**
	 * Logs an error
	 */
	public void logError(String pTemplate, Throwable pRootCause, Object pArg0, Object pArg1, Object pArg2, Object pArg3, Object pArg4, Object pArg5)
			throws ELException {
		if (isLoggingError()) {
			logError(MessageFormat.format(pTemplate, new Object[] { "" + pArg0, "" + pArg1, "" + pArg2, "" + pArg3, "" + pArg4, "" + pArg5, }), pRootCause);
		}
	}

	// -------------------------------------
}
